package aLeSoftware;

import java.util.ArrayList;

import dessin.ModeleDessin;

import palette.ModelePalette;
import patternobserver.Observable;
import patternobserver.Observateur;
/**
 * ModeleGeneral est une classe qui regroupe plusieurs modèles :<br>
 * <ul>
 * <li>ModeleDessin qui correspond au modele du dessin</li>
 * <li>ModelePalette qui correspond au modele de la palette</li>
 * <li>Un attribut String qui correspond à l'outils selectionnée dans la Toolbar</li>
 * <ul>
 * Par l'intermédiaire de cette classe on peut donc avoir accès à toutes les informations relatives à un environnement de dessin.
 * 
 * @author amm
 *
 */

public class ModeleGeneral implements Observable {

	/**
	 * Attribut ModeleDessin : correspond au modele de la zone de dessin
	 */
	private ModeleDessin modDessin;
	/**
	 * Attribut ModelePalette : correspond au modele de la palette de couleur
	 */
	private ModelePalette modPalette;
	/**
	 * Attribut String : correspond à l'outils selectionné dans la Toolbar
	 */
	private String choixOutils;
	private ArrayList<Observateur> listObservateur = new ArrayList<Observateur>();
	

	
	
/**
 * Constructeur, permet d'initialiser un ModeleGeneral, par défaut l'attribut modPalette contient une nouvelle instance
 * de ModelePalette, choixOutils est défini sur "Point" et enfin le modDessin est passé en paramètre :<br>
 * <ul>
 * <li>il peut s'agir d'un ModeleDessin vierge créé avant l'appel du constructeur</li>
 * <li>ou bien d'un ModeleDessin créé à partir d'un fichier binaire : ouverture d'un dessin</li>
 * @param md
 */
	public ModeleGeneral(ModeleDessin md){
		this.modDessin=md;
		this.modPalette = new ModelePalette();
		this.choixOutils = "Point";
		
	}
	
	/**
	 * Permet de récupérer le ModeleDessin
	 * @return un objet ModeleDessin
	 */
	public ModeleDessin getModDessin() {return modDessin;}
	/**
	 * Permet de récupérer le ModelePalette
	 * @return un objet ModelePalette
	 */
	public ModelePalette getModPalette() {return modPalette;}
	/**
	 * Permet de récupérer le String correspondant au choix de l'outils
	 * @return un String correspondant au choix de l'outils
	 */
	public String getChoixOutils() {return choixOutils;}
	/**
	 * Permet de définir l'outils selectionné
	 * @param choixOutils
	 */
	public void setChoixOutils(String choixOutils) {this.choixOutils = choixOutils;}
	

	
	@Override
	public void addObservateur(Observateur obs) {
		this.listObservateur.add(obs);
	}

	@Override
	public void updateObservateur() {
		for(Observateur obs : this.listObservateur )
			obs.update();
	}

	@Override
	public void delObservateur() {
		this.listObservateur = new ArrayList<Observateur>();	
	}
	
}
